/* 
 * File:   MotorJuegoService.cpp
 * Author: max
 * 
 * Created on November 16, 2012, 12:49 PM
 */

#include <sstream>
#include "MotorJuegoServicio.h"
#include "MotorJuegoServicioConstantes.h"
#include "ProtocoloConstantes.h"

using namespace std;
using namespace TP::Servicios;
using namespace TP::Comunicacion;

#define COMANDO_INVALIDO 0

MotorJuegoServicio::MotorJuegoServicio() {
}

MotorJuegoServicio::~MotorJuegoServicio() {
}

void MotorJuegoServicio::iniciar(){}

void MotorJuegoServicio::finalizar(){}


void MotorJuegoServicio::mensajeEntranteManejador(IMensajero* pMensajero, const string& pMensaje){
    
    try
    {
        vector<string> comando;
        this->hidratarMensaje(pMensaje, comando);
        
        if (MOTOR_JUEGO == comando[0])
        {
            if (GET_PARTIDA == comando [1])
                this->getPartida (pMensajero, comando);
            
            if (ATACAR == comando[1])
                this->atacar(pMensajero, comando);
        }
        
    }
    catch (Excepcion& pEx)
    {
        cerr << pEx.what() << endl;
    }
    
}

void MotorJuegoServicio::getPartida (IMensajero* pMensajero, vector<string>& pComando){
    
    // A falta de finally...
    Jugador* jugador = NULL;
    Partida* partida = NULL;
    
    try
    {
        // Buscar la partida correspondiente al Jugador que invoca la solicitud.
        jugador = Jugador::crearDeXML(pComando[2]);
        partida = this->_motor->getPartidaPorJugador(jugador);

        if (partida)
            this->notificar(pMensajero, partida->aXML());
        else
            this->notificar(pMensajero, NULO);
    }
    catch (Excepcion& pEx)
    {
        cerr << pEx.what() << endl;
    }
    
    // ...me aseguro que e liberen los recursos en caso de haber.
    if (jugador) delete jugador;
    // if (partida) delete partida;
}

void MotorJuegoServicio::setMotorJuego (MotorJuego* pMotor) {
    if (pMotor)
        this->_motor = pMotor;
}

void MotorJuegoServicio::atacar(IMensajero* pMensajero, vector<string>& pComando){
    //@todo: Implementar MotorJuegoServicio.atacar.
}
